﻿// owner 蒋家伟
#pragma once
#include "Correspond_home.h"
#include "WeakReference.h"

class QByteArray;
namespace jsdk
{
    // 这是一个比较特殊handler，没有直接继承IHandler。
    // 主要原因是RecvMessage的数据量较多，拷贝数据较多消耗性能。note：事件主要使用发送一些小数据量的对象
    class CORRESPOND_EXPORT ISocketEventHandler : public WeakReference
    {
    public:
        virtual ~ISocketEventHandler() {};

    public:
        /// \ 连接成功后处理当前socket连接成功后会调用此接口
        virtual void connectSuccess() const = 0;

        /// \ 目标主动断开连接时会调用此接口
        virtual void disconnect() const = 0;

        /// \ 触发了Socket错误信息会调用此接口
        /// \ in errorCode 错误码, 本质上等于 enum QAbstractSocket::SocketError
        virtual void socketError(int64_t errorCode) const = 0;

        /// \ 数据发送后会调用此接口做反馈
        /// \ in success 为true表示消息发送成功
        virtual void sendMessageFeedback(bool success) = 0;

        /// \ 收到消息后会把数据发送过来，在当前Socket所在的独立线程中
        /// \ in msgArray 当前收到的信息数据
        virtual void recvMessage(QByteArray&& msgArray) = 0;
    };
}